<?php

class ListBuscadorHistoricos extends TPage {
//<editor-fold defaultstate="collapsed" desc="Constantes">
  const SESION_DATOS = "arr";
  const CAMPO_ORDEN_DATAGRID = "CampoOrdenDataGrid";
  //funciones pagina
  const FUNCION_VER = "Ver";
  const FUNCION_EDITAR = "Editar";

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * obtiene los registros desde la base de datos
   * @author VSR, 27/11/2011
   */
  private function obtenerDatos(){
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $arrFiltros = Utilidades::obtenerSessionPorNombre($nombrePagina.Utilidades::SESION_SUFIJO_FILTROS);
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);

      //obtiene valores de los controles o de la sesion de filtros
      if(Utilidades::isNullOrEmpty($arrFiltros)){
        $strFiltroNombreFlujo = Utilidades::isNull($this->txtFiltroNombreFlujo->Text, "-1");
        $strFiltroFechaDesde = Utilidades::isNull($this->txtFiltroFechaDesde->Text, "-1");
        $strFiltroFechaHasta = Utilidades::isNull($this->txtFiltroFechaHasta->Text, "-1");
        $strEstado = Utilidades::isNull($this->ddlEstado->obtenerSelectedValue(), "-1");
        $strWorkflow = Utilidades::isNull($this->ddlWorkflow->obtenerSelectedValue(), "-1");
      } else {
        $strFiltroNombreFlujo = Utilidades::isNull($arrFiltros[$this->txtFiltroNombreFlujo->ClientID],"-1");
        $strFiltroFechaDesde = Utilidades::isNull($arrFiltros[$this->txtFiltroFechaDesde->ClientID], "-1");
        $strFiltroFechaHasta = Utilidades::isNull($arrFiltros[$this->txtFiltroFechaHasta->ClientID], "-1");
        $strEstado = Utilidades::isNull($arrFiltros[$this->ddlEstado->ClientID], "-1");
        $strWorkflow = Utilidades::isNull($arrFiltros[$this->ddlWorkflow->ClientID], "-1");
      }
      $idUsuario = $oUsuario->getId();
      $idEmpresa = Utilidades::isNull($this->txtIdEmpresa->Value, "-1");

      //obtiene listado
      $arr = WfFlujo::obtenerHistoricos($idEmpresa, $idUsuario, $strFiltroNombreFlujo, $strFiltroFechaDesde, $strFiltroFechaHasta, $strEstado,$strWorkflow);

      //guarda el resultado en session
      Utilidades::grabarSessionPorNombre(self::SESION_DATOS, $arr);
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * actualiza los controles de la pagina segun los datos obtenidos
   * @author VSR, 11/11/2011
   */
  private function actualizaInterfaz(){
    $totalRegistros = 0;
    try {
      $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS);

      //obtiene filtros de la sesion
      $this->cargarFiltrosSesion();

      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        $this->pnlHolderGrilla->Visible = true;
        //carga la grilla a utilizar
        $this->dgListado->Visible = true;
        $this->dgListado->DataSource = $arr;
        $this->dgListado->dataBind();
        Utilidades::configurarPaginadorDataGrid($this->dgListado->PagerStyle, $totalRegistros, $this->dgListado->PageSize);
        Utilidades::mostrarTotalRegistrosGrilla($totalRegistros, $this->lblTotalRegistros);
      } else {
        $this->pnlHolderGrilla->Visible = false;
        $this->pnlMensajeUsuario->Visible = true;
        $textoMensaje = "No se encontraron registros";
        Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $textoMensaje, "50%", Utilidades::ESTILO_MENSAJE_ADVERTENCIA);
        //oculta la grilla
        $this->dgListado->Visible = false;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * inicializa algunos controles cuando se carga por primera vez la pagina
   * @param <type> $isPostBack
   * @author VSR, 11/11/2011
   */
  private function inicializaControles($isPostBack){
    try {
      $registrosPorPagina = $this->txtFiltroRegistrosPorPagina->Text;
      $idEmpresa = Utilidades::obtenerIdEmpresaActiva();

      //-- inicializacion de controles que dependen del postBack --
      if(!$isPostBack){
        //colocar controles
      }

      //-- inicializacion de controles que NO dependen del postBack --
      if($registrosPorPagina == "") {
        $this->txtFiltroRegistrosPorPagina->Text = Utilidades::obtenerRegistrosPorPaginaDefault($this->Application);
      }
      $this->btnFiltrar->Attributes->Add("onclick", "return(validarFormularioBuscador())");
      $this->txtIdEmpresa->Value = $idEmpresa;
      $this->ddlWorkflow->setFiltradoPorId($idEmpresa);

      //verifica los permisos sobre los controles
      $this->verificarPermisos();

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * verifica los permisos sobre los controles
   * @author VSR, 01/01/2011
   */
  private function verificarPermisos(){
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);
    $this->pnlContenido->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER);
    if(!$this->pnlContenido->Visible) {
      $this->pnlMensajeAcceso->Visible = true;
      Utilidades::setPanelMensajeUsuario($this->pnlMensajeAcceso, "No tiene permiso para ver esta p&aacute;gina", "50%", Utilidades::ESTILO_MENSAJE_ERROR);
    }
  }

  /**
   * graba los filtros en sesion
   * @author VSR, 31/05/2012
   */
  private function grabarFiltrosSesion(){
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $arrFiltros = array();
      $arrFiltros[$this->txtFiltroNombreFlujo->ClientID] = $this->txtFiltroNombreFlujo->Text;
      $arrFiltros[$this->txtFiltroFechaDesde->ClientID] = $this->txtFiltroFechaDesde->Text;
      $arrFiltros[$this->txtFiltroFechaHasta->ClientID] = $this->txtFiltroFechaHasta->Text;
      $arrFiltros[$this->ddlEstado->ClientID] = $this->ddlEstado->obtenerSelectedValue();
      $arrFiltros[$this->ddlWorkflow->ClientID] = $this->ddlWorkflow->obtenerSelectedValue();
      $arrFiltros[$this->txtFiltroRegistrosPorPagina->ClientID] = $this->txtFiltroRegistrosPorPagina->Text;
      $arrFiltros[$this->dgListado->ClientID."CurrentPageIndex"] = $this->dgListado->CurrentPageIndex;

      //guarda el resultado en session
      Utilidades::grabarSessionPorNombre($nombrePagina.Utilidades::SESION_SUFIJO_FILTROS, $arrFiltros);
      Utilidades::grabarSessionPorNombre(Utilidades::SESION_CARGAR_FILTROS_SESION, "0");
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * carga los filtros de la sesion si existen
   * @author VSR, 31/05/2012
   */
  private function cargarFiltrosSesion(){
    try {
      //obtiene valores de los controles o de la sesion de filtros
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $arrFiltros = Utilidades::obtenerSessionPorNombre($nombrePagina.Utilidades::SESION_SUFIJO_FILTROS);
      if(!Utilidades::isNullOrEmpty($arrFiltros)){
        $this->txtFiltroNombreFlujo->Text = $arrFiltros[$this->txtFiltroNombreFlujo->ClientID];
        $this->txtFiltroFechaDesde->Text = $arrFiltros[$this->txtFiltroFechaDesde->ClientID];
        $this->txtFiltroFechaHasta->Text = $arrFiltros[$this->txtFiltroFechaHasta->ClientID];
        $this->ddlEstado->asignarSelectedValue($arrFiltros[$this->ddlEstado->ClientID]);
        $this->ddlWorkflow->asignarSelectedValue($arrFiltros[$this->ddlWorkflow->ClientID]);
        $this->txtFiltroRegistrosPorPagina->Text = $arrFiltros[$this->txtFiltroRegistrosPorPagina->ClientID];
        $this->dgListado->PageSize = $this->txtFiltroRegistrosPorPagina->Text;
        $this->dgListado->CurrentPageIndex = $arrFiltros[$this->dgListado->ClientID."CurrentPageIndex"];
        Utilidades::grabarSessionPorNombre(Utilidades::SESION_CARGAR_FILTROS_SESION, "0");
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function onLoad($param) {
    parent::onLoad($param);
    $this->inicializaControles($this->IsPostBack);
    $cargarFiltrosSesion = Utilidades::isNull(Utilidades::obtenerSessionPorNombre(Utilidades::SESION_CARGAR_FILTROS_SESION),"0");
    $this->txtThemeBaseUrl->Value = $this->Page->Theme->BaseUrl;

    //si viene la primera vez obtenemos dato y actualizamos interfaz
    if(!$this->IsPostBack) {
      if($cargarFiltrosSesion == "1"){
        $this->obtenerDatos();
        $this->actualizaInterfaz();
      }
    }
  }

  public function btnFiltrarClick($sender, $param){
    $pageSize = trim($this->txtFiltroRegistrosPorPagina->Text);
    if($pageSize == "" || $pageSize == "0") {
      $pageSize = Utilidades::obtenerRegistrosPorPaginaDefault($this->Application);
      $this->txtFiltroRegistrosPorPagina->Text = $pageSize;
    }
    //asigna total de registros por pagina
    $this->dgListado->PageSize = $pageSize;
    //Muestra la primera pagina del paginador
    $this->dgListado->CurrentPageIndex = 0;
    $this->grabarFiltrosSesion();
    $this->obtenerDatos();
    $this->actualizaInterfaz();
  }

  public function onSortDataGrid($sender, $param) {
    $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS);
    $campoOrdenActualDataGrid = Utilidades::isNull(Utilidades::obtenerSessionPorNombre(self::CAMPO_ORDEN_DATAGRID),"");
    //obtiene el nuevo orden del arreglo
    $arr = Utilidades::obtenerSortArray($arr, $campoOrdenActualDataGrid, $param->SortExpression);
    //graba el orden actual
    Utilidades::grabarSessionPorNombre(self::CAMPO_ORDEN_DATAGRID, $campoOrdenActualDataGrid);
    //graba el array ordenado
    Utilidades::grabarSessionPorNombre(self::SESION_DATOS, $arr);
    //asigna
    $this->actualizaInterfaz();
  }

  public function onChangePageDataGrid($sender,$param) {
    $this->dgListado->CurrentPageIndex = $param->NewPageIndex;
    $this->grabarFiltrosSesion();
    $this->actualizaInterfaz();
  }

  public function onPagerCreatedDataGrid($sender,$param) {
    $param->Pager->Controls->insertAt(0,"<span class=\"cssPaginadorNormal\">P&aacute;gina:</span> ");
  }

  public function onDataBoundDataGrid($sender, $param){
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);
    $indicePrimeraFila = Utilidades::obtenerIndicePrimeraFilaGrilla($this->dgListado);
    $sb = new StringBuilder();
    $item = $param->Item;
    $themeBaseUrl = $this->txtThemeBaseUrl->Value;

    if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
    {
      $txtFlujo = $item->findControl("txtFlujo");
      $txtIdFlujo = $item->findControl("txtIdFlujo");
      $txtIdWorkflow = $item->findControl("txtIdWorkflow");
      $txtIdEmpresa = $item->findControl("txtIdEmpresa");
      $txtIdPaso = $item->findControl("txtIdPaso");
      $txtClase = $item->findControl("txtClase");
      $txtIdCache = $item->findControl("txtIdCache");
      $txtIdHistorial = $item->findControl("txtIdHistorial");
      $txtAprobadores = $item->findControl("txtAprobadores");
      $lblFlujo = $item->findControl("lblFlujo");
      $lblAprobador = $item->findControl("lblAprobador");
      $replicarDatos = "0";
      $cargarFiltrosSesion = "1";
      $nombreTooltips = "tooltips".$txtIdFlujo->Value;
      $tieneTooltips = false;
      $contenidoTooltips = "";

      $queryString = Utilidades::obtenerQueryStringFlujo(Utilidades::QUERYSTRING_FLUJO_NORMAL,
                                                          "",
                                                          $txtIdFlujo->Value,
                                                          $txtIdWorkflow->Value,
                                                          $txtIdEmpresa->Value,
                                                          $txtIdPaso->Value,
                                                          $txtIdCache->Value,
                                                          $txtIdHistorial->Value,
                                                          $replicarDatos,
                                                          $cargarFiltrosSesion,
                                                          $paginaActual);
      $strLink = "index.php?page=Workflow." . $txtClase->Value . "&a=" . $queryString;
      $lblAprobador->Text = Utilidades::formatearAprobadoresPorPaso($txtAprobadores->Value, $nombreTooltips, $tieneTooltips, $contenidoTooltips, $themeBaseUrl);
      $lblFlujo->Text = "<a href=\"".$strLink."\" class=\"cssLink\">".$txtFlujo->Value."</a>";

      if($tieneTooltips){
        $sb->appendLine("jQuery(document).ready(function(){");
        $sb->appendLine("  jQuery('#".$nombreTooltips."').tooltip('".$contenidoTooltips."', { hook: 1, mode:'bc', skin:'blue' });");
        $sb->appendLine("});");
        $this->Page->ClientScript->registerEndScript($nombreTooltips, $sb->toString());
      }

      //limpia controles
      $txtFlujo->Value = "";
      $txtIdFlujo->Value = "";
      $txtIdWorkflow->Value = "";
      $txtIdEmpresa->Value = "";
      $txtIdPaso->Value = "";
      $txtClase->Value = "";
      $txtIdCache->Value = "";
      $txtIdHistorial->Value = "";

      //asigna indice de la fila
      $indiceFila = $indicePrimeraFila + $item->ItemIndex;
      //asigna valor del indice de la fila al control
      Utilidades::setControlIndiceFila($item, "lblIndiceFila", $indiceFila);
    }
  }

//</editor-fold>
}
?>
